kmeans属于聚类算法当中最早也是最经典一个算法,但是我们可以发现kmeans算法属于刚性聚类,例如,一则谈论政治对生物信息技术影响的新闻报道,既可以归类于政治类别,也可以归类于生物技术类别,但不能同时归于这两个类别。既然我们需要优化相关文章的这个特性,那就需要允许重叠或模糊信息。我们也许还需要对数据点分布建模,这些都是超出了kmeans设计的初衷。
不同类型的聚类问题
排他性聚类
有重叠聚类
层次聚类
概率聚类
下面逐一介绍
1. 排他性聚类
在排他性聚类中,一个物品属于一个类别。kmeans实现就是这种排他性的聚类,因此聚类问题需要这个约束,kmeans通常可以解决。
2. 有重叠聚类
如果我们想做是非排他性聚类,即可以把哈利波特归入小说而且也可以归入年轻人类别的玄幻小说。有重叠聚类算法,如模糊kmeans算法就很容易实现这点。
3. 层次聚类
现在假设有两个簇分别代表不同类型书籍,其中一个是玄幻,另一个是太空旅行。但是这两个簇都可以看作是小说的子簇,因此通过合并这两个簇以及一些相似的簇可以构建一个小说簇。
4. 概率模型
一个概率模型通常是一个n维平面内一组点的分布或形状特征。有很多适合不同数据模式的概率模型。概率聚类算法设法为数据集拟合出一个概率模型,通过调整模型的参数来适应数据集。因为少有完全准确拟合,所以这些算法通常给出了一个百分比或者概率值来表示概率模型对簇的拟合程度。
不同聚类算法使用不同的策略。可以将其大致分为如下几类:
确定的中心个数
自底向上的方法(通过组合将点合并为簇)
自顶向下的方法(拆分大簇成小簇方法)
虽然这些算法看起来简单,但是要找到数据点集合最佳划分并不容易。此外大部分此类算法都不能直接转化为mapreduce的形式,因此mahout中并没有包含这些算法。
一个自顶向下的聚类例子就是谱聚类,在谱聚类(谱聚类博文)中我们寻找一条分界线或平面将数据划分为两个集合,使得两个集合边界尽可能大。
自顶向下和自底向上方法优缺点:
这两个方法诱人之处在于不需要用户输入簇的数目,这意味着对于数据点分布未知的数据集,这两类算法仅仅只需要根据相似性度量给出聚类结果。在很多应用中都是行之有效的。然后这些方法很多在研究当中,而且这些算法无法以mapreduce框架执行。